package modelo.desplazadores;

import modelo.util.Vector;

/* Clase abstracta para desplazadores.
 * Un desplazador tiene una posicion, una direccion, y sabe
 *  realizar un movimiento que cambia su posicion segun su direccion
 *  y el tipo de desplazador que sea.
 */

public abstract class Desplazadores{
	
	protected Vector posicion;
	protected Vector direccion;
	protected float velocidad;
	
	public Vector getPosicion(){	
		return posicion;
	}
	
	public Vector getDireccion(){
		return direccion;
	}
	
	//Realiza el movimiento
	public void mover(){			
		posicion = this.getSigPos();
	}
	
	//Cambia el movimiento del desplazador para que retroceda
	public void retroceder(){
		direccion = direccion.rotar(Math.PI);
	}
	
	public void setVelocidad(float vel){
		velocidad = vel;
	}
	
	public void setDir(Vector dir){
		direccion = dir.versor();
	}
	
	//Cambia la direccion del desplazador para que "mire" hacia otra posicion
	public void setDirHacia(Vector otraPos){
		direccion = posicion.direccion(otraPos);
		this.setDir(direccion);
	}
	
	//Devuelve la siguiente posicion en la que continua el movimiento
	public abstract Vector getSigPos();
	
}
